const fs = require('fs');

module.exports = function static( options ) {

    let opts = Object.assign({
        prefix: '/public',
        dir: './public'
    }, options);

    return async (ctx, next) => {
        // 判断一下url的前缀，如果前缀是以 /public 开头，那么就使用 fs 模块映射读取 ./static 目录下的对应文件

        let url = ctx.url;

        if (url.startsWith(opts.prefix)) {
            // url => /public/index.html
            let originFilename = url.replace(opts.prefix, '');
            // console.log(originFilename);
            let filename = `${opts.dir}${originFilename}`;
            // console.log(filename);
            let content = '<h1>Not Found</h1>';
            // console.log(content);
            try {
                content = fs.readFileSync(filename).toString();
                // 这里还需要根据内容的类型（png,html,css）进行单独的 content-type 设置
            } catch (e) {
                // ctx.set => 设置头信息： res.setHeader();
                ctx.status = 404;
                ctx.set('Content-Type', 'text/html;charset="utf-8"');
            }
            ctx.body = content;
        } else {
            // 如果不满足静态资源的规则，那么就把处理的逻辑交个下一个中间件
            await next();
        }
    }

}
